package org.example.module_login.utlis;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;

import java.util.Calendar;

/**
 * JWTToken 创建、解析、验证
 *
 * @author HAJ
 * @since 2025-03-03 15:17:42
 */
public class JWTToken {

    /**
     * 密钥
     */
    private static final String JwtSt = "MySecretKey@HAJ";

    /**
     * 生成 token
     */
    public static String createToken(String userName) {
        // JWT 创建
        JWTCreator.Builder builder = JWT.create();
        // 时间
        Calendar install = Calendar.getInstance();
        // 有效时间为 1 分钟
        install.add(Calendar.MINUTE, 1);
        // 把用户信息 加入到 token 中
        // 可以放入用户信息
        builder.withClaim("user_name", userName);
        // 加入有效时间
        builder.withExpiresAt(install.getTime());
        // 返回生成的 token 使用 HMAC256 加密
        return builder.sign(Algorithm.HMAC256(JwtSt));
    }

    /**
     * 解析 token
     */
    public static String analysisToken(String token) {
        DecodedJWT jwt = null;
        // 解析 token
        jwt = JWT.require(Algorithm.HMAC256(JwtSt)).build().verify(token);
        // 将存入在 token 的用户信息 返回
        return jwt.getClaim("user_name").asString();
    }

    /**
     * 验证 token
     */
    public static Boolean verifyToken(String token) {
        if (token.isEmpty()) {
            return false;
        } else {
            DecodedJWT jwt = null;
            try {
                jwt = JWT.require(Algorithm.HMAC256(JwtSt)).build().verify(token);
            } catch (Exception e) {
                return false;
            }
        }
        return true;
    }

}

